package com.binyouwei.designpatterns.structural_type.proxy;


import com.binyouwei.designpatterns.structural_type.proxy.static_state.ProxyAgent;
import com.binyouwei.designpatterns.structural_type.proxy.dynamic.ProxyDynamicAgent;

/**
 * @author 宾有为
 * Created on 2024/7/15 14:45
 * Social homepage: https://blog.csdn.net/baidu_41616022
 * @desc 代理模式 - 目标对象为其它对象提供一个代理（与目标对象相同的接口），以控制对目标对象的访问。
 **/
public class ProxyMain {

    public static void main(String[] args) {
        // 静态代理模式
        ProxyAgent agent = new ProxyAgent(new ProxyLandlord());
        agent.showHouse();
        agent.signContract();
        // 动态代理模式
        ProxyRenter landlord = new ProxyLandlord();
        ProxyDynamicAgent agent1 = new ProxyDynamicAgent(landlord);
        ProxyRenter proxy = (ProxyRenter) agent1.getProxyInstance();
        proxy.showHouse();
        proxy.signContract();
    }
}